草庐IT

c++ - 段错误——怎么会!

coder 2024-01-31 原文

int Sequence::scoreDegeneracy()
{
    cout << "Score Degeneracy" << name << seqLen << endl;
    int f = 0;
    if (degenComputed == false)
    {
        char _2foldTest = '*';
        char _4foldTest = '*'; 
        int aaseqLen = seqLen/3;
        int i = 0;
        for (i; i < aaseqLen; i++)

        {
            _4foldTest = is4FoldDegenerateSite(i);
            _2foldTest = is2FoldDegenerateSite(i,_4foldTest);
            degScores.totalCodons++
                if (_2foldTest != '*')
            {
                degScores.totalCodons_2fold++;
                if (_2foldTest == 'A')
                {
                    degScores.total_2fold_A++;
                }
                            else if (_2foldTest == 'T')
                {
                    degScores.total_2fold_T++;
                }
                            else if (_2foldTest == 'G')
                {
                    degScores.total_2fold_G++;
                }
                             else
                {
                    degScores.total_2fold_C++;   
                }  
            }else if (_4foldTest != '*')
            {
                degScores.totalCodons_4fold++;
                if (_4foldTest == 'A')
                {
                    degScores.total_4fold_A++;
                }
                            else if (_4foldTest == 'T')
                {
                    degScores.total_4fold_T++;
                }
                            else if (_4foldTest == 'C')
                {
                    degScores.total_4fold_C++;
                }
                            else
                {
                    degScores.total_4fold_G++;
                }
            }
            cout << "Crashes right here when i = 0." << endl;        
        } 
    }
    degenComputed = true;
    return 1;
}

快把我逼疯了! SegFault 发生在 for 循环的第一次迭代结束时。行为完全像它应该的那样,第一次测试返回正确的结果。段错误发生在 i 甚至递增之前......

我错过了什么??

...

char Sequence::is4FoldDegenerateSite(int codonIndex){
 char aminoAcid = aaSeq[codonIndex];
 //cout << "Amino acid of codon number " << codonIndex << " is: " << aminoAcid << endl;
 int loc = readingFrame + (codonIndex * 3) + 2;  
 int locR = loc - 2;
 switch (aminoAcid){
  case 'A':
   return seq[loc];
  case 'T':
   return seq[loc];
  case 'V':  
   return seq[loc];      
  case 'G':
   return seq[loc];
  case 'P':
   return seq[loc];
  case 'S'://Can also be 2 fold degenerate
   if (seq[locR] == 'T'){ 
    return seq[loc];
   }else{ 
    return '*';
   }    
  case 'R'://Can also be 2 fold degenerate
   if (seq[locR] == 'C'){
    return seq[loc];
   }else{ 
    return '*';
   }
  case 'L'://Can also be 2 fold degenerate
   if (seq[locR] == 'C'){ 
    return seq[loc];
   }else{ 
    return '*';   
   }   
 }  
 return '*';
}
char Sequence::is2FoldDegenerateSite(int codonIndex, char _4FoldResults){
 char aminoAcid = aaSeq[codonIndex];
 int loc = readingFrame + (codonIndex * 3) + 2;
 //char doubleDegeneracyTest = is4FoldDegenerateSite(codonIndex);
 //bool doubleDegeneracy = false;
 //if (doubleDegeneracyTest != '*') doubleDegeneracy = true;  
 switch (aminoAcid){
  case 'N':
   return seq[loc];
  case 'D':
   return seq[loc];
  case 'C':  
   return seq[loc];      
  case 'Q':
   return seq[loc];
  case 'E':
   return seq[loc];
  case 'H':
   return seq[loc];
  case 'K':
   return seq[loc];
  case 'F':
   return seq[loc];
  case 'Y':
   return seq[loc];
  case 'X':
   return seq[loc];
  case 'S'://Can also be 2 fold degenerate
   if (_4FoldResults == '*'){ 
    return seq[loc];
   }else{ 
    return '*';
   }    
  case 'R'://Can also be 2 fold degenerate
   if (_4FoldResults == '*'){
    return seq[loc];
   }else{ 
    return '*';
   }
  case 'L'://Can also be 2 fold degenerate
   if (_4FoldResults == '*'){ 
    return seq[loc];
   }else{ 
    return '*';   
   }   
 }  
 return '*';
}

Valgrind 结果:

**17043** new/new[] failed and should throw an exception, but Valgrind
==17043==    at 0x4024E35: VALGRIND_PRINTF_BACKTRACE (valgrind.h:3720)
==17043==    by 0x40253C2: operator new(unsigned int) (vg_replace_malloc.c:214)
==17043==    by 0x40D6435: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D70A7: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D7EDC: std::string::reserve(unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D83AF: std::string::append(std::string const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x804BA7F: std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (basic_string.h:2168)
==17043==    by 0x804ACDF: GenomeSeq::setup() (GenomeSeq.C:108)
==17043==    by 0x804A4FE: GenomeSeq::GenomeSeq(std::string, std::string) (GenomeSeq.C:52)
==17043==    by 0x80496DF: main (Main2.C:143)
**17043**    cannot throw exceptions and so is aborting instead.  Sorry.
==17043==    at 0x4024E35: VALGRIND_PRINTF_BACKTRACE (valgrind.h:3720)
==17043==    by 0x40253D0: operator new(unsigned int) (vg_replace_malloc.c:214)
==17043==    by 0x40D6435: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D70A7: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D7EDC: std::string::reserve(unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D83AF: std::string::append(std::string const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x804BA7F: std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (basic_string.h:2168)
==17043==    by 0x804ACDF: GenomeSeq::setup() (GenomeSeq.C:108)
==17043==    by 0x804A4FE: GenomeSeq::GenomeSeq(std::string, std::string) (GenomeSeq.C:52)
==17043==    by 0x80496DF: main (Main2.C:143)
Loading sequence..==17043== 
==17043== HEAP SUMMARY:
==17043==     in use at exit: 2,749,679 bytes in 10 blocks
==17043==   total heap usage: 39,043 allocs, 39,032 frees, 80,022,672,644 bytes allocated
==17043== 
==17043== 27 bytes in 1 blocks are definitely lost in loss record 1 of 10
==17043==    at 0x4025390: operator new(unsigned int) (vg_replace_malloc.c:214)
==17043==    by 0x40D6435: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D7340: ??? (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D7525: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x804969E: main (Main2.C:143)
==17043== 
==17043== 28 bytes in 1 blocks are definitely lost in loss record 2 of 10
==17043==    at 0x4025390: operator new(unsigned int) (vg_replace_malloc.c:214)
==17043==    by 0x40D6435: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D7340: ??? (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D7525: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x80496C3: main (Main2.C:143)
==17043== 
==17043== 83 bytes in 1 blocks are definitely lost in loss record 3 of 10
==17043==    at 0x4025390: operator new(unsigned int) (vg_replace_malloc.c:214)
==17043==    by 0x40D6435: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D70A7: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D7EDC: std::string::reserve(unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D814A: std::string::append(char const*, unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40B3F3E: std::basic_istream<char, std::char_traits<char> >& std::getline<char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40C9799: std::basic_istream<char, std::char_traits<char> >& std::getline<char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x804ACB5: GenomeSeq::setup() (GenomeSeq.C:106)
==17043==    by 0x804A4FE: GenomeSeq::GenomeSeq(std::string, std::string) (GenomeSeq.C:52)
==17043==    by 0x80496DF: main (Main2.C:143)
==17043== 
==17043== 100 bytes in 1 blocks are definitely lost in loss record 4 of 10
==17043==    at 0x4025390: operator new(unsigned int) (vg_replace_malloc.c:214)
==17043==    by 0x40D6435: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D70A7: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D7EDC: std::string::reserve(unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D814A: std::string::append(char const*, unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40B3F3E: std::basic_istream<char, std::char_traits<char> >& std::getline<char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40C9799: std::basic_istream<char, std::char_traits<char> >& std::getline<char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x804AC07: GenomeSeq::setup() (GenomeSeq.C:101)
==17043==    by 0x804A4FE: GenomeSeq::GenomeSeq(std::string, std::string) (GenomeSeq.C:52)
==17043==    by 0x80496DF: main (Main2.C:143)
==17043== 
==17043== 100 bytes in 1 blocks are definitely lost in loss record 5 of 10
==17043==    at 0x4025390: operator new(unsigned int) (vg_replace_malloc.c:214)
==17043==    by 0x40D6435: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D7340: ??? (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D75D1: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D33C5: std::basic_istringstream<char, std::char_traits<char>, std::allocator<char> >::basic_istringstream(std::string const&, std::_Ios_Openmode) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x804AC42: GenomeSeq::setup() (GenomeSeq.C:103)
==17043==    by 0x804A4FE: GenomeSeq::GenomeSeq(std::string, std::string) (GenomeSeq.C:52)
==17043==    by 0x80496DF: main (Main2.C:143)
==17043== 
==17043== 8,192 bytes in 1 blocks are definitely lost in loss record 8 of 10
==17043==    at 0x4025024: operator new[](unsigned int) (vg_replace_malloc.c:258)
==17043==    by 0x40A2592: std::basic_filebuf<char, std::char_traits<char> >::_M_allocate_internal_buffer() (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40A65B1: std::basic_filebuf<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40A7EAF: std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(char const*, std::_Ios_Openmode) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x804ABBF: GenomeSeq::setup() (GenomeSeq.C:97)
==17043==    by 0x804A4FE: GenomeSeq::GenomeSeq(std::string, std::string) (GenomeSeq.C:52)
==17043==    by 0x80496DF: main (Main2.C:143)
==17043== 
==17043== 8,192 bytes in 1 blocks are definitely lost in loss record 9 of 10
==17043==    at 0x4025024: operator new[](unsigned int) (vg_replace_malloc.c:258)
==17043==    by 0x40A2592: std::basic_filebuf<char, std::char_traits<char> >::_M_allocate_internal_buffer() (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40A65B1: std::basic_filebuf<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40A7EAF: std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(char const*, std::_Ios_Openmode) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x804AC9D: GenomeSeq::setup() (GenomeSeq.C:105)
==17043==    by 0x804A4FE: GenomeSeq::GenomeSeq(std::string, std::string) (GenomeSeq.C:52)
==17043==    by 0x80496DF: main (Main2.C:143)
==17043== 
==17043== 2,732,253 bytes in 1 blocks are definitely lost in loss record 10 of 10
==17043==    at 0x4025390: operator new(unsigned int) (vg_replace_malloc.c:214)
==17043==    by 0x40D6435: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D70A7: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D7EDC: std::string::reserve(unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x40D83AF: std::string::append(std::string const&) (in /usr/lib/libstdc++.so.6.0.13)
==17043==    by 0x804BA7F: std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (basic_string.h:2168)
==17043==    by 0x804ACDF: GenomeSeq::setup() (GenomeSeq.C:108)
==17043==    by 0x804A4FE: GenomeSeq::GenomeSeq(std::string, std::string) (GenomeSeq.C:52)
==17043==    by 0x80496DF: main (Main2.C:143)
==17043== 
==17043== LEAK SUMMARY:
==17043==    definitely lost: 2,748,975 bytes in 8 blocks
==17043==    indirectly lost: 0 bytes in 0 blocks
==17043==      possibly lost: 0 bytes in 0 blocks
==17043==    still reachable: 704 bytes in 2 blocks
==17043==         suppressed: 0 bytes in 0 blocks
==17043== Reachable blocks (those to which a pointer was found) are not shown.
==17043== To see them, rerun with: --leak-check=full --show-reachable=yes
==17043== 
==17043== For counts of detected and suppressed errors, rerun with: -v
==17043== ERROR SUMMARY: 8 errors from 8 contexts (suppressed: 19 from 8)

序列.h:

#ifndef SEQUENCE_H
#define SEQUENCE_H
using namespace std;
#include <iostream>
#include <fstream>
#include <cstring>
#include <sstream>
#include <string>
class GeneSeqs;
class Sequence{
    public:
        Sequence();
        Sequence(char * seqStart,char * aaSeqStart, int length);//Constructor
        ~Sequence();//Destructor -- for the transprof
        //void setup();//Setups up variables.
        char &operator[](int);
        char * getSeq(){return seq;}//returns the address of sequence
        string getAASeq(){return aaSeq;}//returns address of aaSeq
        int getLength(){return seqLen;}
        bool isPositive(){return positiveStrand;}
        /**
         * Setters
         */ 
        void setRevC(char * sequ){revC = sequ;}
        void setSeq(char * sequ){
            seq = sequ;
        }
        void setAASeq(char * a){aaSeq = a;}
        void setLength(int len){seqLen = len;}
        void setAALength(int len){aaSeqLen = len;}
        void setPositivity(bool trufal){
            positiveStrand = trufal;
            if (trufal == false){
                buildRevC();
            }
        }
        //
        int getTCount(){return count.T;}
        int getACount(){return count.A;}
        int getCCount(){return count.C;}
        int getGCount(){return count.G;}
        //void setAASeq(int * a){aaSeq = a;}
        string get_aaSeq(){return aaSeq;}
        bool get_aaSeqExhists(){return aaSeqTranslated;}
        int get_aaSeqLen(){return aaSeqLen;}
        void print();
        void printAA();
        char getAA(int i){return aaSeq[i];}
        int getAALoc(char aa){return AAchar2num(aa);}
        float getMIMScore(){return MIMScore;}
        void setMIM(float MIM){MIMScore = MIM;}
        void translateToAA(int code);
        void computeCrudeCompositions();
        int scoreDegeneracy();
        void degeneracyReport();
        void setName(string n){name = n;}
        float distanceMeasure(Sequence * target);
        bool degeneracyIsScored(){return degenComputed;}
        float distanceMeasure(GeneSeqs * target);
        float distanceMeasureA(GeneSeqs * target, int point, float runningSum);
        int getDegenData(int code);
        void setStartConstant(int i){start = i;}
        void printInfo();
    private:
        struct nucleotideCounts{
            int T;
            int C;
            int A;
            int G;      
        }count;
        struct degeneracyScores{
            int totalCodons;
            int totalCodons_4fold;
            int totalCodons_2fold;
            int total_4fold_A;
            int total_4fold_T;
            int total_4fold_C;
            int total_4fold_G;
            int total_2fold_A;
            int total_2fold_T;
            int total_2fold_G;
            int total_2fold_C;          
        }degScores;
        string name;
        char is4FoldDegenerateSite(int codonIndex);
        char is2FoldDegenerateSite(int codonIndex, char _4FoldResults);
        bool degenComputed;
        float MIMScore;
        void buildRevC();
        string revC;
        char nucleoRevC(char c);
        char * seq;
        int readingFrame;//zero till used...
        int aaSeqLen;
        bool aaSeqTranslated;
        int start;
        int seqLen; //Number of nucleotides in sequence
        bool positiveStrand; //Positive strand = true, negative = false;
        //bool hasY;
        //Genetic sequence in numerical Amino Acide representation;
        string aaSeq;
        void geneSegments2AASeq();
        void computeAATransProf();
        int AAchar2num(char x);
        char AAnum2char(int x);
        char codon2AA(int codonIndex);
        char codon2AA(char * codon);
        char codon2AA(int * codon);
        int Int(string num);    
        int Int(char num);
        char num2nucleo(int a);
        void codonSeq2AASeq();
        int char2nucleo2(char a);
        string String(int num);     
};
#endif

最佳答案

total heap usage: 39,043 allocs, 39,032 frees, 80,022,672,644 bytes allocated

80GB??我认为你在某处有内存泄漏......

我会投票赞成您将“seq”作为 char* 处理的方式,而不是在其他地方使用 std:string。看起来像是等待发生的事故。

关于c++ - 段错误——怎么会!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3151935/

有关c++ - 段错误——怎么会!的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  4. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  5. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  6. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  7. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  8. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  9. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  10. ruby - Ruby 中的隐式返回值是怎么回事? - 2

    所以我开始关注ruby​​,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出

随机推荐