Как я выполняю одну версию веб-приложения при разработке следующей версии?

Решения для сводного столбца Phone Number:

g = df.groupby('ID').cumcount().add(1)

df1 = df.set_index([g, 'ID'])['Phone Number'].unstack().add_prefix('Phone Number ')
print (df1)
ID  Phone Number 1  Phone Number 2
1         234444.0         30909.0
2         989898.0             NaN

Или:

df['idx'] = df.groupby('ID').cumcount().add(1)
df1 = df.pivot('idx', 'ID', 'Phone Number').add_prefix('Phone Number ')
print (df1)
ID   Phone Number 1  Phone Number 2
idx                                
1          234444.0         30909.0
2          989898.0             NaN

Или:

s = df.groupby('ID')['Phone Number'].apply(list)
df1 = pd.DataFrame(s.values.tolist(), index=s.index).add_prefix('Phone Number ')
print (df1)
    Phone Number 0  Phone Number 1
ID                                
1           234444        989898.0
2            30909             NaN

Последнее, если требуется индекс для столбца для Решения выше:

df1 = df1.rename_axis(None, axis=1).rename_axis('ID').reset_index()
print (df1)
   ID  Phone Number 1  Phone Number 2
0   1        234444.0         30909.0
1   2        989898.0             NaN

Решения для нескольких столбцов и необходимо обрабатывать их одинаково:

print (df)
   ID  Phone Number Name  Val
0   1        234444    A   10
1   1        989898    B    4
2   2         30909    C    6

g = df.groupby('ID').cumcount().add(1)

df = df.set_index([g, 'ID']).unstack()
df.columns = [f'{a}{b}' for a, b in df.columns]
df = df.rename_axis('ID').reset_index()
print (df)
   ID  Phone Number1  Phone Number2 Name1 Name2  Val1  Val2
0   1       234444.0        30909.0     A     C  10.0   6.0
1   2       989898.0            NaN     B   NaN   4.0   NaN

Или:

df1 = df.groupby('ID').agg(list)
comb = [pd.DataFrame(df1[x].values.tolist(), index=df1.index) for x in df1.columns]
df = pd.concat(comb, axis=1, keys=df1.columns)
df.columns = [f'{a}{b}' for a, b in df.columns]
df = df.rename_axis('ID').reset_index()
print (df)
   ID  Phone Number0  Phone Number1 Name0 Name1  Val0  Val1
0   1         234444       989898.0     A     B    10   4.0
1   2          30909            NaN     C  None     6   NaN
5
задан RexE 9 March 2009 в 07:03
поделиться

4 ответа

1) URL Seperate www.yoursite.com по сравнению с test.yoursite.com. можно также сделать www.yoursite.com и www.yoursite.com/development и т.д. Вы могли также создать / бету или подготовку/..

2) Сохраните отдельные базы данных, один для производства, и один для разработки. Запишите сценарий, который скопирует Вашу живую базу данных в dev базу данных. Сохраните одну базу данных для каждого типа сайта, который Вы создаете. (Можно хотеть создать бету или базу данных подготовки для тестера).. Сделайте свою собственную работу в dev базе данных. Если Вы изменяете структуру базы данных, сохраняете изменения как .sql файл, который может загружаться и работаться живая база данных сайта, когда Вы поворачиваете те живые изменения.

3) Функции слияния в Ваши различные сайты с управлением версиями. Я в настоящее время играю с установкой подверсии для веб-приложений, которая имеет мою конюшню (соединительная линия), один для подготовки, и один для разработки. Теги разработки + ответвления объединяются в подготовку, и затем подготовка тегов/ответвлений объединяется в конюшню. Управление версиями позволит Вам управлять своим исходным кодом всегда, Вы хотите. Необходимо будет найти методологию, которая работает на Вас, и используйте ее.

4) Рассмотрите автоматизацию сборки. Это опубликует Ваш сайт для Вас автоматически. Смотрите на http://ant.apache.org/. Это может управлять большой автоматической проверкой Вашего кода и загрузкой его на каждый определенный сайт, поскольку Вам, возможно, понадобилось бы.

5) Игрушка месяца: существует утилита, названная завихрением, которое можно найти ценным. Это делает много из командной строки. Это могло бы быть хорошо, чтобы Вы сделали в случае, если Вы не хотите использовать все или любого Муравья.

Удачи!

7
ответ дан 13 December 2019 в 19:36
поделиться

То, что я делаю, имеют экспорт копия моего репозитория SVN и помещают файлы на живой рабочий сервер, и затем сохраняют виртуальную машину с разработкой, работающей копия, и отправляют изменения в repo, когда я сделан.

0
ответ дан 13 December 2019 в 19:36
поделиться

Вы обычно использовали бы управление версиями и имели бы два домена: your-site.com и test.your-site.com. Затем your-site.com всегда обновлял бы для транкинга, который является последним током, поставляя версию. Вы сделали бы, Ваша разработка в ответвлении соединительной линии и test.your-site.com обновит к этому. Затем Вы периодически объединяете изменения от своего ответвления разработки для транкинга.

2
ответ дан 13 December 2019 в 19:36
поделиться

У Jas Panesar есть лучший ответ, если Вы спрашиваете это от точки зрения разработки, конечно. Таким образом, если Вы просто спрашиваете, как легко разделить Ваши новые разработки от сайта, который уже работает. Однако, если Ваш вопрос на самом деле спрашивал, как выполнить обе версии одновременно, то вот мои два цента.

Ваша установка имеет непосредственное отношение к этому, но я всегда рекомендую выполнить основанные на процессе веб-серверы во-первых. Таким образом, для не использования поточных серверов (менее относящийся к этому вопросу) и не встраивающий в веб-сервер (то есть, не используя mod_python, который является соответствующей частью здесь). Так, у Вас есть один или несколько процессов, получающих Запросы HTTP от Вашего веб-сервера (Apache, Nginx, Lighttpd, и т.д.). Теперь, когда Вы хотите испытать что-то живое, не влияя на Ваш нормальный рабочий сайт, можно поднять процесс, обслуживающий запросы, который никогда не проксировал регулярные запросы к нему как другие, делают. Таким образом, обычные пользователи не видят его.

Можно установить субдомен, который указывает этому, и можно установить промежуточное программное обеспечение, которое перенаправляет "специального" пользователя к бета-версии. Это позволяет Вам разворачивать новые возможности некоторым пользователям, но не другим.

Теперь, самые большие проблемы идут с изменениями базы данных. Миграция схемы является грандиозным предприятием и чем-то, на что большинство из нас никогда не обращает внимание. Я думаю, что выполнение бок о бок является большим, потому что оно вынуждает Вас сделать миграции схемы правильно. Таким образом, Вы не можете только завершить работу всего и выполнить долгие изменения схемы перед возвращением его. Вы никогда не обращались бы, что любой удаленно важный сайт делает это.

Ключ является теми небольшими шагами. У Вас должно всегда быть две версии Вашего кода, который в состоянии получить доступ к той же базе данных, таким образом, изменения, которые Вы вносите для нового кода, не должны взламывать старый код. Это разламывает на несколько шагов, которые можно всегда делать:

  • Можно добавить столбец со значением по умолчанию, или это является дополнительным. Новый код может использовать его, и старый код может проигнорировать его.
  • Можно обновить активную версию с кодом, который знает для использования нового столбца, на уровне которой точки можно сделать, это потребовало.
  • Можно заставить новую версию проигнорировать столбец, и когда это становится основной версией, можно удалить тот столбец.

Можно сделать эти небольшие шаги для миграции между любыми схемами. Можно многократно добавить новый столбец, который заменяет старый, разверните новый код и удалите старый столбец, все, не прерывая сервис.

Тем не менее его Ваше первое веб-приложение? Можно, вероятно, повредить его. У Вас, вероятно, есть немного пользователей :-) Но, это фантастически, Вы даже задаете этот вопрос. Много ярмарок "профессионалов", чтобы когда-либо спросить это, и даже затем меньше ответа это.

2
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: